﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Xml;

namespace Zhy.HelpClassLibrary.Utility.XmlHelper
{
    /// <summary>
    /// xml文件的增删改查，序列化等操作。
    /// </summary>
    public class AppHelper
    {
        /// <summary>
        /// 设置节点的值，若该节点不存在，则创建一个新appSettings的节点。
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool SetValue(string key, string value)
        {
            XmlDocument cfgDoc = new XmlDocument(); // xml文档操作类
            // ((Assembly.GetEntryAssembly()).GetName()).Name 这段代码获取到的是程序集名称
            // 目前的这种获取配置文件路径.net8支持的
            string path = ((Assembly.GetEntryAssembly()).GetName()).Name + ".dll.config"; // 获取配置文件路径- Zhy.LittleBookKeeping.dll.config 
            cfgDoc.Load(path); // 加载xml文档 - 这里可能直接默认使用程序集根目录
            XmlElement root = cfgDoc.DocumentElement; // 获取xml文档的根目录
            XmlNode node = cfgDoc.SelectSingleNode("//appSettings"); // 获取xml指定节点
            if (node == null)
            {
                node = cfgDoc.CreateElement("appSettings"); // 创建指定截点
                root.AppendChild(node); // 将指定的节点添加到此节点的子节点列表的末尾。

            }
            XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']"); // 获取add截点中指定key值的截点
            if (addElem != null)
            {
                addElem.SetAttribute("value", value); // 设置节点值
            }
            else
            {
                XmlElement entry = cfgDoc.CreateElement("add"); // 添加节点
                entry.SetAttribute("key", key); // 设置节点的key值
                entry.SetAttribute("value", value); // 设置节点value值
                node.AppendChild(entry); // 将指定的节点添加到此节点的子节点列表的末尾。
            }
            cfgDoc.Save(path); // 保存xml文档
            return true;
        }

        /// <summary>
        /// 获取appSettings中节点的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetValue(string key)
        {
            XmlDocument cfgDoc = new XmlDocument(); // xml文档操作类
            //GetEntryAssembly()  获取默认应用程序域中的进程可执行文件
            string path = ((Assembly.GetEntryAssembly()).GetName()).Name + ".dll.config"; // 获取配置文件路径
            if (File.Exists(path)) // 判断路径是否存在 - 如果不写路径-默认使用程序集根目录
            {
                cfgDoc.Load(path); // 加载xml文档
                XmlElement root = cfgDoc.DocumentElement; // 获取xml文档的根目录
                XmlNode node = cfgDoc.SelectSingleNode("//appSettings"); // 获取xml指定节点
                if (node != null)
                {
                    XmlElement addElem = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']"); // 搜索指定截点，但是写法没看懂
                    if (addElem != null)
                    {
                        return addElem.GetAttribute("value"); // 获取指定截点数据值
                    }
                }
            }
            return "";
        }
    }
}
